Carga de paquetes

library(dplyr)
library(sf)
library(DT)
library(plotly)
library(leaflet)
library(raster)
library(ggplot2)
library(rgdal)

Cargar los datos

Primates<-
  st_read("https://raw.githubusercontent.com/gf0604-procesamientodatosgeograficos/2021i-datos/main/gbif/primates-cr-registros.csv",
    options = c(
      "X_POSSIBLE_NAMES=decimalLongitude",
      "Y_POSSIBLE_NAMES=decimalLatitude"
    ),
    quiet = TRUE
)

# Asignación de CRS
st_crs(Primates) = 4326

Capa geespacial de cantones

cantones <-
  st_read(
    "https://raw.githubusercontent.com/gf0604-procesamientodatosgeograficos/2021i-datos/main/ign/delimitacion-territorial-administrativa/cr_cantones_simp_wgs84.geojson",
    quiet = TRUE
  )

Cruce espacial con la tabla de cantones, para obtener el nombre del cantón

Primates <- 
 Primates %>%
  st_join(cantones["canton"])

Tabla de registros de presencia

Primates%>%
  st_drop_geometry()%>% 
  dplyr::select(family, species, stateProvince, canton, eventDate)%>%
  datatable(colnames = c("Familia", "Especies", "Provincia", "Cantón", "Fecha"),
    options = list(
      pageLength=5,
      language= list(url= "//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json")
    )
    )

Gráfico de los primates en Costa Rica

Grafi_pie<- data.frame("categorie"= rownames(Primates), Primates)
datos<-Grafi_pie[, c("categorie", "species", "individualCount")]

plot_ly(
  datos,
  labels= ~species,
  values= ~individualCount,
type = "pie"
)%>%
  layout(
    title="Cantidad de registros por especie y porcentaje de primates",
    xaxis= list(
      showgried= FALSE,
      zeroline= FALSE, 
      showticklabels= FALSE
    ),
    yaxis= list(
      showgried= FALSE,
      zeroline=FALSE,
      showticklabels= FALSE)
  )

Crear las capas

#Crear la capa de monos congo
Mo_congo<-
  Primates%>%
  filter(species == "Alouatta palliata")


#Crear la capa de monos ardilla
Mo_ardilla<-
  Primates%>%
  filter(species=="Saimiri oerstedii")

#Crear la capa de monos araña
Mo_arana<- 
  Primates%>%
  filter(species =="Ateles geoffroyi")

#Crear la capa de monoscarablanca
Mo_carablanca<- 
  Primates%>%
  filter(species =="Cebus capucinus")
alt <- getData(
  "worldclim",
  var = "alt",
  res = .5,
  lon = -84,
  lat = 10
)

Recorte de la capa de altitud

altitud <-crop(alt, extent(-86,-82.3, 8, 11.3)) 

Cl<- colorNumeric(c("green", "orange", "red"),
                     values(altitud),
                     na.color = "transparent")

Mapa de registros de presencia

Primates %>%
   dplyr::select(stateProvince,
         canton,
         family,
         species,
         scientificName,
         basisOfRecord,
         eventDate,
         decimalLongitude,
         decimalLatitude) %>%
  leaflet() %>%
  addProviderTiles(providers$OpenStreetMap.Mapnik, group = "OpenStreetMap") %>%
  addProviderTiles(providers$Stamen.TonerLite, group = "Stamen Toner Lite") %>%
  addProviderTiles(providers$Esri.WorldImagery, group = "Imagenes de ESRI") %>%
  addRasterImage(
    altitud, 
    colors = Cl, 
    opacity = 0.7,
    group = "Altitud")  %>%
      addCircleMarkers(
    data = Mo_congo,
     stroke = F,
    radius = 2,
    fillColor = "blue",
    fillOpacity = 1,
    popup = paste(
      Primates$stateProvince,
      Primates$canton,
      Primates$family,
      Primates$species,
      Primates$basisOfRecord,
      Primates$eventDate,
      Primates$decimalLongitude,
      Primates$decimalLatitude,
      Primates$scientificName,
      sep = '<br/>'
    ),
     group = "Mo_congo"
  ) %>%
  addCircleMarkers(
    data = Mo_ardilla,
         stroke = F,
    radius = 2,
    fillColor = "red",
    fillOpacity = 1,
    popup = paste(
      Primates$stateProvince,
      Primates$canton,
      Primates$family,
      Primates$species,
      Primates$basisOfRecord,
      Primates$eventDate,
      Primates$decimalLongitude,
      Primates$decimalLatitude,
      Primates$scientificName,
      sep = '<br/>'
    ),
group = "Mo_ardilla"
  )%>%
        addCircleMarkers(
    data = Mo_arana,
     stroke = F,
    radius =2,
    fillColor = "black",
    fillOpacity = 1,
    popup = paste(
      Primates$stateProvince,
      Primates$canton,
      Primates$family,
      Primates$species,
      Primates$basisOfRecord,
      Primates$eventDate,
      Primates$decimalLongitude,
      Primates$decimalLatitude,
      Primates$scientificName,
      sep = '<br/>'
    ),
    group = "Mo_arana")%>%
  addCircleMarkers(
    data = Mo_carablanca,
     stroke = F,
    radius = 2,
    fillColor = "purple",
    fillOpacity = 1,
    popup = paste(
      Primates$stateProvince,
      Primates$canton,
      Primates$family,
      Primates$species,
      Primates$basisOfRecord,
      Primates$eventDate,
      Primates$decimalLongitude,
      Primates$decimalLatitude,
      Primates$scientificName,
      sep = '<br/>'
    ), group = "Mo_carablanca")%>%

  addLayersControl(
    baseGroups = c("OpenStreetMap", "Stamen Toner Lite", "Imágenes de ESRI"),
    overlayGroups = c("Mo_congo","Mo_ardilla", "Mo_arana","Mo_carablanca", "Altitud")
  ) %>%
  addMiniMap(
    tiles = providers$Stamen.OpenStreetMap.Mapnik,
    position = "bottomleft",
    toggleDisplay = TRUE
  )